//
//  SplitTableView.m
//
//
//  Created by ET|冰琳 on 15/10/8.
//  Copyright © 2015年 . All rights reserved.
//

#import "SplitTableView.h"


@interface SplitTableView ()<UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, strong) NSMutableArray *tablesArray;

@end


@implementation SplitTableView

- (NSMutableArray *)tablesArray{
    if (!_tablesArray) {
        self.tablesArray = [NSMutableArray new];
    }
    return _tablesArray;
}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [self.dataSource splitTableView:self numberOfRowsInComponent:[self.tablesArray indexOfObject:tableView]];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    return [self.dataSource splitTableView: self CellInTableView:tableView ForRow:indexPath.row forComponent:[self.tablesArray indexOfObject:tableView]];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([self.delegate respondsToSelector:@selector(splitTableView:didSelectComponent:row:)]) {
        [self.delegate splitTableView:self didSelectComponent:[self.tablesArray indexOfObject:tableView] row:indexPath.row];
    }
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 45.f;
}


#pragma mark -
- (void)reloadAllComponents{
    if (self.dataSource)
    {
        NSInteger componentCount = [self.dataSource numberOfComponentsInsplitTableView:self];
        if (self.tablesArray.count > componentCount) {
            [self.tablesArray removeObjectsInRange:NSMakeRange(componentCount, self.tablesArray.count - componentCount)];
            [self.tablesArray enumerateObjectsUsingBlock:^(UITableView * obj, NSUInteger idx, BOOL * _Nonnull stop) {
                [obj reloadData];
            }];
        }
        else{
            
            for (int i = 0 ; i < componentCount ; i ++)
            {
                CGFloat componentWidth ;
                
                if (![self.delegate
                      respondsToSelector:@selector(splitTableView:widthForComponent:)]) {
                    componentWidth = self.frame.size.width / componentCount;
                }
                else{
                    componentWidth = [self.delegate splitTableView:self widthForComponent:i];
                }
                
                UITableView *tableView ;
                if (i < self.tablesArray.count) {
                    tableView = [self.tablesArray objectAtIndex:i];
                }
                else{
                    UITableView *lastTable = (i == 0) ? nil : self.tablesArray[i - 1];
                    tableView = [[UITableView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(lastTable.frame), 0, componentWidth, self.frame.size.height) style:UITableViewStylePlain];
                    tableView.scrollsToTop = NO;
                    [self addSubview:tableView];
                    tableView.tableFooterView = [UIView new];
                    tableView.dataSource = self;
                    tableView.delegate   = self;
                    [self.tablesArray addObject:tableView];
                }
                [tableView reloadData];
            }
        }
    }
}

- (void)reloadComponent:(NSInteger)component{
    UITableView *tableView = self.tablesArray[component];
    [tableView reloadData];
    
    tableView.contentOffset = CGPointZero;
}

- (void)layoutSubviews{
    [super layoutSubviews];
    for (UIView *v in self.tablesArray) {
        CGRect f = v.frame;
        f.size.height = CGRectGetHeight(self.frame);
        v.frame = f;
    }
}

@end
